package onjava.arrays;

// arrays/ComparingArrays.java
// (c)2021 MindView LLC: see Copyright.txt
// We make no guarantees that this code is fit for any purpose.
// Visit http://OnJava8.com for more book information.
// Using Arrays.equals()
import java.util.*;
import onjava.*;

/**
 * 
 * 数组比较，使用<code>Arrays.equals()</code>
 *
 * @author Lucky Yang
 */
public class ComparingArrays {
  public static final int SZ = 15;

  static String[][] twoDimeArray() {
    String[][] md = new String[5][];
    Arrays.setAll(md, n -> new String[n]);
    for (int i = 0; i < md.length; i++) {
      Arrays.setAll(md[i], new Rand.String()::get);
    }
    return md;
  }

  public static void main(String[] args) {
    int[] a1 = new int[SZ], a2 = new int[SZ];
    Arrays.setAll(a1, new Count.Integer()::get);
    Arrays.setAll(a2, new Count.Integer()::get);
    System.out.println(
        "a1 == a2: " + Arrays.equals(a1, a2));
    a2[3] = 11;
    System.out.println(
        "a1 == a2: " + Arrays.equals(a1, a2));

    Integer[] a1w = new Integer[SZ],
        a2w = new Integer[SZ];
    Arrays.setAll(a1w, new Count.Integer()::get);
    Arrays.setAll(a2w, new Count.Integer()::get);
    System.out.println(
        "a1w == a2w: " + Arrays.equals(a1w, a2w));
    a2w[3] = 11;
    System.out.println(
        "a1w == a2w: " + Arrays.equals(a1w, a2w));

    String[][] md1 = twoDimeArray(), md2 = twoDimeArray();
    System.out.println(Arrays.deepToString(md1));
    System.out.println("deepEquals(md1, md2): " +
        Arrays.deepEquals(md1, md2));
    System.out.println(
        "md1 == md2: " + Arrays.equals(md1, md2));
    md1[4][1] = "#$#$#$#";
    System.out.println(Arrays.deepToString(md1));
    System.out.println("deepEquals(md1, md2): " +
        Arrays.deepEquals(md1, md2));
  }
}
/*
 * Output:
 * a1 == a2: true
 * a1 == a2: false
 * a1w == a2w: true
 * a1w == a2w: false
 * [[], [btpenpc], [btpenpc, cuxszgv], [btpenpc, cuxszgv,
 * gmeinne], [btpenpc, cuxszgv, gmeinne, eloztdv]]
 * deepEquals(md1, md2): true
 * md1 == md2: false
 * [[], [btpenpc], [btpenpc, cuxszgv], [btpenpc, cuxszgv,
 * gmeinne], [btpenpc, #$#$#$#, gmeinne, eloztdv]]
 * deepEquals(md1, md2): false
 */
